iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
Software Development

邁向專業軟體工程師必修的英文課系列 第 18

Day 18 - [副詞] Not,你的變數被旋轉了嗎?

  • 分享至 

  • xImage
  •  

在昨天的談true or false一文裡,提到了驚嘆號,做為布林值反值使用。
布林值做為程式裡的旗幟、開關或參數,經常會用來存放狀態值,例如使用者是否還在線上,東西還有沒有庫存,下注之後是否己經settled,或者直播主是否還在線上...等,都會用到布林值做判斷。
語法也很簡單,就是

    bool IsOK = true;

通常他的預設值都是false或是0,表示為負狀態。

就這麼一個小東西,如果在命名上或使用上沒有要求,也會發生一些微妙的錯誤,例如:

    if(!IsNotOK == false){
    }

我自己都不知道自己在寫什麼,所以我們來分解看看這個判斷式要什麼東西。
程式語言是個由左到右的語法,所以這句話的意思應該是:

如果 Not IsNotOK 是 false的話

基本負負得正的原理,等號前後會變成 IsNotOK == true,所以是

如果 IsNotOK 是 true的話

所以什麼是是IsNotOK?

說了那麼多,其實就是要表達一件事:在布林值的參數,或方法的命名時,應該要用Positive naming。例如:

    bool IsLogin;
    bool HasToken;
    bool CanGetDiscount;

然後再用true或false來判斷真實的狀態。

另外是有些否定字,例如

    bool IsHidden;
    bool IsDisabled;

在使用上要特別注意,因為在某些地方(例如CSS)會用這些否定字,那相對於這些產品,Model層或者介面程式的屬性要用正面字,還是用否定字當屬性?其實只要統一用法就好,但轉換時要特別注意邏輯關係:原因是系統的屬性可能會需要讓各別的系統去接受傳來的屬性,而不相關的系統可能會需要去適應其他系統帶來的變化。

還有一種是狀態詞的不同,例如On/Off, In/Out, Up/Down..等,在命名時也要注意一致性,以正向表列的方式命名,讓屬性可以很清楚的知道方向性。

所以,當看到這麼一個參數時

    public class User{
        public bool IsLocked { get; set;}
    }

即使他的意思不是正面的,但在使用上也很會自然的應用這個值:

    if(user.IsLocked){
        //Kick off
    }

程式可讀性也就提昇了。

當然常發生的情況是因為需求文件就是寫著反意的字(例如:如果帳號沒有被鎖定),然後就照這個語法來命名,但明天我們就會聊到像這種條件句,應該要怎麼處理比較好。


上一篇
Day 17 - [形容詞二] 完全主觀的個人意見,談true or false
下一篇
Day 19 - [連接詞一] 想好好討論一下if的用法 - 1
系列文
邁向專業軟體工程師必修的英文課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言